package com.negocio.entidades;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.validator.Min;

@Entity
public class Prova implements Serializable {
	@Id
	private int id;
	
	@ManyToOne
	private CompCurr cc;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(nullable=false)
	private Date dtAbertura;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(nullable=false)
	private Date dtEncerramento;
	
	@Min(0)
	@Column(nullable=false)
	private int numQuest;
	
	@Column(nullable=false)
	private String tipoQuest;
	
	@Column(nullable=false)
	private String temas;
	
	@Min(0)
	@Column(nullable=false)
	private int nivelDificuldadeMin;

	@Min(0)
	@Column(nullable=false)
	private int nivelDificuldadeMax;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(nullable=false)
	private Date dtCadastro;
	
	@Column(nullable=false)
	private boolean status;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public CompCurr getCc() {
		return cc;
	}

	public void setCc(CompCurr cc) {
		this.cc = cc;
	}

	public Date getDtAbertura() {
		return dtAbertura;
	}

	public void setDtAbertura(Date dtAbertura) {
		this.dtAbertura = dtAbertura;
	}

	public Date getDtEncerramento() {
		return dtEncerramento;
	}

	public void setDtEncerramento(Date dtEncerramento) {
		this.dtEncerramento = dtEncerramento;
	}

	public int getNumQuest() {
		return numQuest;
	}

	public void setNumQuest(int numQuest) {
		this.numQuest = numQuest;
	}

	public String getTipoQuest() {
		return tipoQuest;
	}

	public void setTipoQuest(String tipoQuest) {
		this.tipoQuest = tipoQuest;
	}

	public String getTemas() {
		return temas;
	}

	public void setTemas(String temas) {
		this.temas = temas;
	}

	public int getNivelDificuldadeMin() {
		return nivelDificuldadeMin;
	}

	public void setNivelDificuldadeMin(int nivelDificuldadeMin) {
		this.nivelDificuldadeMin = nivelDificuldadeMin;
	}

	public int getNivelDificuldadeMax() {
		return nivelDificuldadeMax;
	}

	public void setNivelDificuldadeMax(int nivelDificuldadeMax) {
		this.nivelDificuldadeMax = nivelDificuldadeMax;
	}

	public Date getDtCadastro() {
		return dtCadastro;
	}

	public void setDtCadastro(Date dtCadastro) {
		this.dtCadastro = dtCadastro;
	}

	public boolean isStatus() {
		return status;
	}

	public void setStatus(boolean status) {
		this.status = status;
	}
	
	@Override
	public boolean equals(Object p){
		if(p instanceof Prova){
			final Prova pOutro = (Prova) p;
			return (pOutro.getDtAbertura().equals(this.dtAbertura) && pOutro.getDtEncerramento().equals(this.dtEncerramento) && pOutro.getCc().getId()== this.getCc().getId());
		}
		return true;
	}
	
	
	@Override
	public int hashCode(){
		return this.hashCode();
	}
}
